package com.MyBatisPlus.test_1_29_mybatisplus.mapper;

import com.MyBatisPlus.test_1_29_mybatisplus.model.UserInfo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface UserInfoMapper {
    // 动态SQL练习
    // 先假设 性别 gender是否为空

    // 通过注解的方式:
    // 1. 要把全部的 sql 放在 script 标签下
    // 2. 使用if 标签
    // if 标签要放在 要判断的字段前面, 并且通过 test 属性进行判断条件
    // 如<if test='gender!=null' >gender,</if>
    // test后面的 gender 对应的是 Java 的属性, 而不是 sql 的字段
    // 并且接收和响应values 里面都要写if标签
    // 而且里面必须是单引号.
    @Insert("<script>insert into userinfo (username,password,age," +
            "<if test='gender!=null' >gender,</if>" +
            "phone) "  +
            "values(#{username},#{password},#{age}," +
            "<if test='gender!=null'>#{gender},</if>" +
            "#{phone})</script>")
    Integer insert(UserInfo userInfo);

    // 这就写完了


    // 接下来通过 xml 的方式来写
    Integer insertByXML(UserInfo userInfo);

    // 查询操作
    // 用xml 的方式来做
    List<UserInfo> selectByCondition(UserInfo userInfo);

    // 使用注解的方式
    @Select("<script>" +
            "select * from userinfo"+
            "<where>"+
            "<if test=\"username!=null\">"+
            "username = #{username}"+
            "</if>"+
            "<if test=\"age!=null\">"+
            "and age = #{age}"+
            "</if>"+
           " <if test=\"gender!=null\">"+
            "and gender = #{gender}"+
            "</if>"+
           " </where>"+
            "</script>")
    List<UserInfo> selectByCondition2(UserInfo userInfo);

    // 更新操作
    // 使用 xml 的方式
    Integer updateByCondition(UserInfo userInfo);

    // 删除操作
    Integer batchDelete(List<Integer> list);

    // include标签 演示 查询
    List<UserInfo> selectCondition(UserInfo userInfo);
    List<UserInfo> selectCondition2(UserInfo userInfo);
}
